//
//  12.数值的整数次方.swift
//  数据结构与算法
//
//  Created by ZERO on 2021/5/17.
//

import Foundation
/*
 题目：给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
    保证base和exponent不同时为0。不得使用库函数，同时不需要考虑大数问题，也不用考虑小数点后面0的位数
 思路：当指数为负数的时候，可以先对指数求绝对值，然后算出次⽅的结果之后再取倒数。如果底数为0，则直接返回0。此时的次⽅在数学上是没有意义的。 除此之外，我们要注意：由于计算机表示⼩数（包括float和double型⼩数）都有误差，我们不能直接⽤等号（==）判断两个⼩数是否相等。如果两个⼩ 数的差的绝对值很⼩，⽐如⼩于0.0000001，就可以认为它们相等。
 */
func offer_12() {
    print(Solution().Power(2.0, -3))
}

fileprivate class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     * @param base double浮点型
     * @param exponent int整型
     * @return double浮点型
     */
    func Power ( _ base: Double,  _ exponent: Int) -> Double {
        // write code here
        guard !(base == 0 && exponent == 0) else { return 0 }
        if base == 0 { return 0 }
        if exponent == 1 { return base }
        var result: Double = 1
        for _ in 0..<abs(exponent) {
            result *= base
        }
        return exponent > 0 ? result : (1/result)
    }
}
